package main

import (
	"fmt"
	"math"
)

//作业11 根据学生多次考试的分数，求平均分数，中位数，标准差，方差
func main() {
	var f float64
	var s float64
	var t float64
	var fr float64
	var fi float64
	var arr []float64

	fmt.Printf("请输入五次考试的考试成绩")
	fmt.Printf("请输入第一次考试的考试成绩")
	fmt.Scan(&f)
	arr = append(arr, f)
	fmt.Printf("请输入第二次考试的考试成绩")
	fmt.Scan(&s)
	arr = append(arr, s)
	fmt.Printf("请输入第三次考试的考试成绩")
	fmt.Scan(&t)
	arr = append(arr, t)
	fmt.Printf("请输入第四次考试的考试成绩")
	fmt.Scan(&fr)
	arr = append(arr, fr)
	fmt.Printf("请输入第五次考试的考试成绩")
	fmt.Scan(&fi)
	arr = append(arr, fi)

	fc := GetFangC(arr)
	z := GetZhong(arr)
	p := GetPing(arr)
	bz := GetBiaoZhun(arr)

	fmt.Println("平均数为 ", p)
	fmt.Println("方差为 ", fc)
	fmt.Println("标准差为 ", bz)
	fmt.Println("中位数为 ", z)
}

//求方差
func GetFangC(arr []float64) float64 {
	var res float64
	ave := GetPing(arr)

	for i := 0; i < len(arr); i++ {
		ping := arr[i] - ave
		ping = math.Pow(ping, 2)
		res += ping / float64(len(arr))
	}
	return res
}

//求中位数
func GetZhong(arr []float64) float64 {
	var res float64
	arr = Sort(arr, true)
	var arrlen = len(arr)
	var num int

	if arrlen%2 == 0 {
		num = arrlen / 2
		res = (arr[num] + arr[num+1]) / 2
	} else {
		num = int(arrlen/2) + 1
		res = arr[num]
	}
	return res
}

//求平均数
func GetPing(arr []float64) float64 {
	var res float64
	var sums float64
	for i := 0; i < len(arr); i++ {
		sums += arr[i]
	}
	res = sums / float64(len(arr))
	return res
}

//求标准差
func GetBiaoZhun(arr []float64) float64 {
	var res float64
	var fc = GetFangC(arr)
	res = math.Pow(fc, 0.5)
	return res
}

//排序
func Sort(arr []float64, re bool) []float64 {
	for i := 0; i < len(arr)-1; i++ {
		for j := 0; j < len(arr)-i-1; j++ {
			if GetRe(arr[j], arr[j+1], re) {
				temp := arr[j]
				arr[j] = arr[j+1]
				arr[j+1] = temp
			}
		}
	}

	return arr
}

//选择顺序还是倒序
func GetRe(a float64, b float64, re bool) bool {

	if re {
		re = (a > b)
	} else {
		re = (b > a)
	}
	return re
}
